
namespace gen {

    template <typename S, typename CondT>
    template <typename InfoT>
	void
	gen_if<S,CondT>::generate(InfoT & info) const
	{
		if ( branching.decision(info) )
		{
			this->subject().generate(info);
		}
	}

    template <typename DerivedT>
	template <class T>
	inline gen_if< DerivedT, cond<T> >
	generator<DerivedT>::operator[](cond<T> const& c) const
    {
        return gen_if< DerivedT, cond<T> >(derived(), c);
    }

    template <typename DerivedT>
	inline gen_if< DerivedT, cond<bool> >
	generator<DerivedT>::operator[](bool b) const
    {
        return gen_if< DerivedT, cond<bool> >(derived(), b);
    }

	template <class T>
	inline cond<T>
	if_g(const T & f)
    {
        return cond<T>(f);
    }

};
